// 引入加密相关的命名空间
using System.Security.Cryptography;

// 定义密码哈希服务的命名空间
namespace UniversalAdmin.Infrastructure.Services;

// 静态类：提供密码哈希相关功能
public static class PasswordHasher
{
    // 生成随机盐值
    public static string GenerateSalt()
    {
        // 创建16字节的盐值缓冲区
        byte[] salt = new byte[16];
        // 使用安全的随机数生成器填充盐值
        using (var rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(salt);
        }
        // 将盐值转换为Base64字符串返回
        return Convert.ToBase64String(salt);
    }

    // 生成密码哈希值
    public static string GenerateHash(string password, string salt)
    {
        // 将Base64盐值转换回字节数组
        byte[] saltBytes = Convert.FromBase64String(salt);
        // 使用PBKDF2算法生成哈希（迭代10000次，SHA256算法）
        using (var pbkdf2 = new Rfc2898DeriveBytes(password, saltBytes, 10000, HashAlgorithmName.SHA256))
        {
            // 获取32字节(256位)的哈希值
            byte[] hashBytes = pbkdf2.GetBytes(32);
            // 将哈希值转换为Base64字符串返回
            return Convert.ToBase64String(hashBytes);
        }
    }

    // 验证密码哈希
    public static bool VerifyHash(string enteredPassword, string storedHash, string storedSalt)
    {
        // 使用输入的密码和存储的盐值生成哈希
        string computedHash = GenerateHash(enteredPassword, storedSalt);
        // 比较生成的哈希与存储的哈希是否一致
        return computedHash == storedHash;
    }
}